/*
 * @Author: wuyanfeiying
 * @Date: 2021-06-30 10:02:09
 */
/*
  1. Promise 就是一个类,在执行这个类的时候,需要传递一个执行器进去,执行器会立即执行
  2. Promise 中有三种状态: 成功 fulfilles 失败 rejected 等待 pending
     pending --> fulfilled
     pending --> rejected
     一旦确认了状态就不可以更改了
  3. resolve 和 reject 函数 是用来更改状态的
     resolve--> 将 pending 变更为 fulfilled
     reject--> 将 pending 变更为 rejected
  4. then 方式
     promise原型上的方法,判断状态: 
                        成功 -->调用成功的回调函数; 失败 --> 调用失败的回调函数
  5. then 的链式调用:
      同一个promise下面的then是可以被多次调用的
      then方法的回调函数拿到的值,是上一个then方法的回调函数的返回值
*/

const MyPromise = require("./code4-myPromise");

// const p1 = new MyPromise((resolve, reject)=>{
//   resolve('成功')
//   // reject('失败')
// })

// p1.then(value=>{
//   console.log('成功的值: ',value);
// },reason=>{
//   console.log("失败的原因:",reason);
// })

// ----

// const p2 = new MyPromise((resolve,reject)=>{
//   // 异步
//   setTimeout(()=>{
//     resolve('成功')
//   },2000)
// })

// p2.then(value=>{
//   console.log(value);
// },reason=>{
//   console.log(reason);
// })

// -----

// const p3 = new MyPromise((resolve,reject)=>{
//   setTimeout(()=>{
//     resolve('success')
//   },2000)
// })

// p3.then(value=>{
//   console.log(1)
//   console.log('resolve',value);
// })

// p3.then(value=>{
//   console.log(2)
//   console.log('resolve',value);;
// })

// p3.then(value=>{
//   console.log(3);
//   console.log('resolve',value);
// })

// ----
// const p4 = new MyPromise((resolve, reject) => {
//   // 目前这里只处理同步的问题
//   resolve("success");
// });

// function other() {
//   return new MyPromise((resolve, reject) => {
//     resolve("other");
//   });
// }
// p4.then((value) => {
//   console.log(1);
//   console.log("resolve", value);
//   return other();
// }).then((value) => {
//   console.log(2);
//   console.log("resolve", value);
// });

// ----
let p5 = new MyPromise((resolve, reject) => {
  resolve("success");
});

let p6 = p5.then((value) => {
  console.log(1);
  console.log(value);
  return p6;
});

p6.then(value=>{
  console.log(2);
  console.log(value);
},reason=>{
  console.log(3);
  console.log(reason.message);
})